package com.tjsinfo.tjsoa.system.bo;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.tjsinfo.tjsoa.documentationflow.dangweifawen.vo.TDangweifawenNeirong;
//import com.tjsinfo.tjsoa.documentationflow.tongzhifawen.vo.TTongzhifawenNeirong;
import com.tjsinfo.tjsoa.documentationflow.xingzhengfawen.vo.TXingzhengfawenNeirong;
import com.tjsinfo.tjsoa.system.vo.TSystemUser;

/**
 * 用户管理BO
 * @author 王晓伟
 *
 */
public interface ISystemUserBo {
	/**
	 * 添加系统用户
	 * @param 系统用户实体
	 * @return 添加后的ID
	 */
	public Integer addSystemUser(TSystemUser systemUser);
	/**
	 * 删除系统用户
	 * @param 系统用户ID
	 * @return 是否成功
	 */
	public Boolean deleteSystemUser(Integer systemUserId);
	
	/**
	 * 系统用户转化
	 * @param 系统用户ID
	 * @return 是否成功
	 */
	public Boolean intoSystemUser(Integer systemUserId);
	/**
	 * 修改系统用户
	 * @param 系统用户实体
	 * @return 是否成功
	 */
	public Boolean updateSystemUser(TSystemUser systemUser);
	/**
	 * 查询所有系统用户
	 * @param 分页的首行
	 * @param 分页的最大行
	 * @return 系统用户列表
	 */
	public List<TSystemUser> selectAllSystemUser(Integer first,Integer max);
	/**
	 * 查询所有启用用户
	 * @param 分页的首行
	 * @param 分页的最大行
	 * @return 系统用户列表
	 */
	public List<TSystemUser> selectQiyongSystemUser(Integer first,Integer max,Byte state);
	/**
	 * 查询所有停用用户
	 * @param 分页的首行
	 * @param 分页的最大行
	 * @return 系统用户列表
	 */
	public List<TSystemUser> selectTingyongSystemUser(Integer first,Integer max,Byte state);
	/**
	 * 查询所有系统用户
	 * @return 系统用户列表
	 */
	public List<TSystemUser> selectAllSystemUser();
	/**
	 * 根据用户名称模糊查询系统用户
	 * @param 有户名
	 * @param 分页的首行
	 * @param 分页的最大行
	 * @return 系统用户列表
	 */
	public List<TSystemUser> selectSystemUserByLikeUsername(String username,Integer first,Integer max);
	/**
	 * 根据ID查询一个系统用户
	 * @param ID
	 * @return 系统用户
	 */
	public TSystemUser findByIdSystemUser(Integer id);
	/**
	 * 判断密码是否正确
	 * @param ID
	 * @param password
	 * @return bool
	 */
	public String findByIdUser(Integer id,String password);
	/**
	 * 查询系统用户的总行数
	 * @return 总行数
	 */
	public Integer selectSytemUserTotalLine();
	/**
	 * 查询启用用户的总行数
	 * @return 总行数
	 */
	public Integer selectQiyongUserTotalLine();
	/**
	 * 查询停用用户的总行数
	 * @return 总行数
	 */
	public Integer selectTingyongUserTotalLine();
	/**
	 * 根据用户的名称模糊查询查询总的行数
	 * @param 用户名
	 * @return 总行数
	 */
	public Integer selectSytemUserLikeUsernameTotalLine(String username);
	/**
	 * 根据用户的名称模糊查询查询总的行数
	 * @param 用户ID
	 * @return 总行数
	 */
	public Integer selectSytemUserLikeUserIdTotalLine(Integer userId);
	/**
	 * 根据权限组查询总的行数
	 * @param 用户ID
	 * @return 总行数
	 */
	public Integer selectSytemUserRoleGroupTotalLine(Integer rloeGroupId);
	/**
	 * 用户验证
	 * @param HttpServletRequest对象
	 * @return 
	 */
	public Boolean isUser(HttpServletRequest request);
	/**
	 * 根据部门ID查找用户
	 * @param 部门ID
	 * @return
	 */
	public List<TSystemUser> selectByDepartment(String departmentId);
	
	/**
	 * 根据部门ID查找非删除的用户用户
	 * @param 部门ID
	 * @return
	 */
	public List<TSystemUser> selectByDepartmentNotDel(String departmentId);
	
	/**
	 * 根据职位ID查找用户
	 * @param 职位ID
	 * @return
	 */
	public List<TSystemUser> selectByDuty(String dutyId);
	
	/**
	 * 根据职位名称查找用户
	 * @param 职位名称
	 * @return
	 */
	public List<TSystemUser> selectByDutyName(String dutyName);
	
	
	/**
	 * 根据岗位ID查找用户
	 * @param 岗位ID
	 * @return
	 */
	public List<TSystemUser> selectByPost(String postId);
	
	/**
	 * 根据岗位名称查找用户
	 * @param 岗位名称
	 * @return
	 */
	public List<TSystemUser> selectByPostName(String postName);
	
	/**
	 * 根据权限组ID查找用户
	 * @param 权限组ID
	 * @return
	 */
	public List<TSystemUser> selectByRloesGroup(Integer rloesGroupId);
	/**
	 * 根据权限组ID查找用户详情
	 * @param 权限组ID
	 * @return
	 */
	public List<TSystemUser> selectByUserRolesGroup(Integer rloesGroupId,Integer first,Integer max);
	/**
	 * 注册一个系统用户
	 * @param 系统用户
	 * @param 部门ID字符串
	 * @param 职位ID字符串
	 * @param 岗位ID字符串
	 * @param 权限组ID字符串
	 * @param 权限ID字符串
	 * @return 系统用户ID
	 */
	public Integer singerSystemUser(TSystemUser systemUser,String departmentid,String dutyid,String postid,String rloesGroupid,String rolesid);
	
	/**
	 * 注册一个系统用户
	 * @param 系统用户
	 * @param 部门ID字符串
	 * @param 职位ID字符串
	 * @param 岗位ID字符串
	 * @param 权限组ID字符串
	 * @param 权限ID字符串
	 * @return 系统用户ID
	 */
	public Boolean alterSystemUser(TSystemUser systemUser,String departmentid,String dutyid,String postid,String rloesGroupid,String rolesid,Integer ischang);
	/**
	 * 判断登录名是否重名
	 * @param 登录名
	 * @return
	 */
	public Boolean isSameLoginName(String loginname);
	
	/**
	 * 判断用户名是否重名
	 * @param 登录名
	 * @return
	 */
	public Boolean isSameUserName(String username);
	
	/**
	 * 获得当前登陆用户的权限字符串
	 * @param systemUser当前登陆用户
	 */
	public String getUserRoles(Integer systemUserID);
	/**
	 * 根据部门和岗位名称查询用户
	 * @param departmentId
	 * @param postName
	 * @return
	 */
	public String[] selectUserByDepartmentAndPostName(String[] departmentId,String postName);
	public Boolean isUserPost(Integer userid,String postName);
	/**
	 * 判断用户是否有这个职位
	 * @param 用户ID
	 * @param 岗位名称
	 * @return
	 */
	public Boolean isUserDuty(Integer userid,String dutyName);
	/**
	 * 判断用户是否有这个职位级别
	 * @param 用户ID
	 * @param 职位级别
	 * @return
	 */
	public Boolean isUserDutyLevel(Integer userid,Integer levelNo);

	/**
	 *根据权限ID查询所具有该权限的用户集合
	 * @param 用户ID
	 * @return
	 */
	public List<TSystemUser> findByLikePermission(Integer role);
	
	/**
	 *部门下所有用户（包括所有下属部门）
	 * @param 部门ID
	 * @return
	 */
	public List<TSystemUser> findByMainDepartment(String departmentId);
	
	public List<TSystemUser> findInUserIds(Integer[] users);
	
	/**
	 * 对用户ID集合根据OrderId进行排序
	 * @param userIdList 用户ID集合
	 * @return
	 */
	public List<String> userlistOrdery(List<String> userIdList);
	
	/**
	 * 根据ID查询一个系统用户附加的二级公司账户
	 * @param ID
	 * @return 系统用户
	 */
	public TSystemUser findByIdSystemUserErJiGongSi(Integer dataBaseId,Integer erjiuserid);
	
	public TSystemUser findByLoginName(String loginName);
	
	/**
	 * 根据用户ID查询用户上级部门发文待办
	 * @param userId
	 * @return
	 */
	public List<TXingzhengfawenNeirong> selectXingZhengFaWenSuperDaiBanList(Integer subDataBase,Integer dataBaseId, Integer userId,String proname);
	
	
	/**
	 * 根据用户ID查询用户上级部门发文待办
	 * @param userId
	 * @return
	 */
	public List<TDangweifawenNeirong> selectDangWeiFaWenSuperDaiBanList(Integer subDataBase,Integer dataBaseId, Integer userId,String proname);
	
	/**
	 * 根据用户ID查询用户上级部门发文待办
	 * @param userId
	 * @return
	 */
//	public List<TTongzhifawenNeirong> selectTongZhiFaWenSuperDaiBanList(Integer subDataBase,Integer dataBaseId, Integer userId,String proname);
	
	
	public Boolean endTask(Integer dataBaseId, Integer taskId);
	
	/**
	 * 查询下一级发文内容
	 * @param id
	 * @return
	 */
	public TXingzhengfawenNeirong selectDownXingZhengFaWei(Integer dataBaseId,String id);
	
	/**
	 * 查询下一级发文内容
	 * @param id
	 * @return
	 */
	public TDangweifawenNeirong selectDownDangWeiFaWei(Integer dataBaseId,String id);
	
	/**
	 * 查询下一级发文内容
	 * @param id
	 * @return
	 */
//	public TTongzhifawenNeirong	 selectDownTongZhiFaWei(Integer dataBaseId,String id);
	
	/**
	 * 判断用户是否是该部门
	 * @param userId 用户ID
	 * @param departmentName 部门名称
	 * @return
	 */
	public Boolean selectUserInfoIsDepartment(Integer userId,String departmentName);
	
	/**
	 * 授权封发
	 * @param userId
	 * @return
	 */
	public Boolean shouQuan(Integer mainId,Integer userId);
	
	public Integer  selectTask(String userId,String processName);
	
	public Integer  selectHuiyi(String userId2,String userId3,String userId4);
}
